package powerup;

import javax.swing.JLabel;
import nivel.Casillero;
import nivel.Nivel;

/**
 * Clase abstracta utilizada para factorizar propiedades de los power-ups del
 * juego.
 * 
 * @author Agustin Orge (LU.85538)
 * @author Victoria Martinez de la Cruz (LU.87620)
 */

public abstract class PowerUp {

	/**
	 * Atributos de instancia
	 */
	protected Casillero casilleroActual;
	protected JLabel label;
	protected Nivel nivel;
	protected boolean activado;

	/**
	 * El constructor le asigna el nivel pasado por parametro al powerup y lo
	 * establece como desactivado
	 */
	protected PowerUp(Nivel n) {
		activado = false;
		nivel = n;
	}

	// consultas

	/**
	 * Retorna el nivel con el cual el powerup esta relacionado
	 * 
	 * @return nivel
	 */
	public Nivel getNivel() {
		return nivel;
	}

	/**
	 * Retorna el casillero actual en el tablero del powerup
	 * 
	 * @return casilleroActual
	 */
	public Casillero getCasilleroActual() {
		return casilleroActual;
	}

	/**
	 * Retorna la etiqueta grafica asociada al powerup
	 * 
	 * @return label
	 */
	public JLabel getLabel() {
		return label;
	}

	/**
	 * Retorna si el powerup esta o no activado
	 * 
	 * @return true si el powerup esta activado, false en caso contrario
	 */
	public boolean getActivado() {
		return activado;
	}

	// comandos

	/**
	 * Accion provista por un powerup permanente
	 */
	public void accion() {
	}

	/**
	 * Metodo abstracto que modela la situacion en la que Mario agarra un
	 * powerup
	 */
	public abstract void agarrar();

	/**
	 * El powerup es activado cuando Mario golpea la caja y aparece en el
	 * casillero superior
	 */
	public void activar() {
		activado = true;
		Casillero aux = new Casillero(casilleroActual.getX(),
				casilleroActual.getY() - 16);
		casilleroActual = aux;
		aux.setPowerUp(this);
		label.setLocation(casilleroActual.getX(), casilleroActual.getY());
		nivel.getGrafica().getPanelEntidades().agregarEntidad(label);

	}

}
